From 0e37d6739393cfe2da99e6331dc981780acf96e1 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Wed, 23 Nov 2016 13:55:28 -0500 Subject: [PATCH] text handle: Don't leak adjustments This can happen if the weak pointer is triggered before the adjustments are unset. Pointed out in https://bugzilla.gnome.org/show_bug.cgi?id=774790 --- gtk/gtktexthandle.c | 26 +++++++++++--------------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/gtk/gtktexthandle.c b/gtk/gtktexthandle.c index 19e89f1d1a..04373fe70b 100644 --- a/gtk/gtktexthandle.c +++ b/gtk/gtktexthandle.c @@ -458,25 +458,21 @@ _gtk_text_handle_set_scrollable (GtkTextHandle *handle, priv = handle->priv; - if (priv->parent_scrollable) + if (priv->vadj) { - if (priv->vadj) - { - g_signal_handlers_disconnect_by_data (priv->vadj, handle); - g_object_unref (priv->vadj); - priv->vadj = NULL; - } + g_signal_handlers_disconnect_by_data (priv->vadj, handle); + g_clear_object (&priv->vadj); + } - if (priv->hadj) - { - g_signal_handlers_disconnect_by_data (priv->hadj, handle); - g_object_unref (priv->hadj); - priv->hadj = NULL; - } - - g_object_remove_weak_pointer (G_OBJECT (priv->parent_scrollable), (gpointer *) &priv->parent_scrollable); + if (priv->hadj) + { + g_signal_handlers_disconnect_by_data (priv->hadj, handle); + g_clear_object (&priv->hadj); } + if (priv->parent_scrollable) + g_object_remove_weak_pointer (G_OBJECT (priv->parent_scrollable), (gpointer *) &priv->parent_scrollable); + priv->parent_scrollable = scrollable; if (scrollable) -- 2.30.2